/*
* Author: Chris Seguin
*
* This software has been developed under the copyleft
* rules of the GNU General Public License. Please
* consult the GNU General Public License for more
* details about use and distribution of this software.
*/
package org.acm.seguin.ide.jbuilder;
import com.borland.jbuilder.node.JavaFileNode;
import com.borland.primetime.editor.EditorPane;
import com.borland.primetime.ide.Browser;
import com.borland.primetime.node.FileNode;
import com.borland.primetime.node.Node;
import com.borland.primetime.vfs.Buffer;
import com.borland.primetime.vfs.ReadOnlyException;
import com.borland.primetime.viewer.AbstractTextNodeViewer;
import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import org.acm.seguin.ide.common.EditorOperations;
/**
* The implementation of the editor operations for JBuilder
*
*@author Chris Seguin
*/
public class JBuilderEditorOperations extends EditorOperations {
private Buffer buffer;
/**
* Sets the string in the IDE
*
*@param value The new file contained in a string
*/
public void setStringInIDE(String value)
{
if (value != null) {
try {
buffer.setContent(value.getBytes());
}
catch (ReadOnlyException roe) {
JOptionPane.showMessageDialog(null,
"The file that you ran the pretty printer on is read only.",
"Read Only Error",
JOptionPane.ERROR_MESSAGE);
}
}
}
/**
* Sets the line number
*
*@param value The new LineNumber value
*/
public void setLineNumber(int value)
{
Browser browser = Browser.getActiveBrowser();
Node active = browser.getActiveNode();
AbstractTextNodeViewer sourceViewer =
(AbstractTextNodeViewer) browser.getViewerOfType(active, AbstractTextNodeViewer.class);
EditorPane editor = sourceViewer.getEditor();
editor.gotoPosition(value, 1, false, EditorPane.CENTER_ALWAYS);
}
/**
* Gets the initial string from the IDE
*
*@return The file in string format
*/
public String getStringFromIDE()
{
Browser browser = Browser.getActiveBrowser();
Node active = browser.getActiveNode();
if (active instanceof JavaFileNode) {
JavaFileNode jtn = (JavaFileNode) active;
try {
buffer = jtn.getBuffer();
byte[] contents = buffer.getContent();
return new String(contents);
}
catch (java.io.IOException ioex) {
ioex.printStackTrace();
}
}
return null;
}
/**
* Returns the initial line number
*
*@return The LineNumber value
*/
public int getLineNumber()
{
Browser browser = Browser.getActiveBrowser();
Node active = browser.getActiveNode();
if (active == null)
return -1;
AbstractTextNodeViewer sourceViewer =
(AbstractTextNodeViewer) browser.getViewerOfType(active, AbstractTextNodeViewer.class);
if (sourceViewer == null)
return -1;
EditorPane editor = sourceViewer.getEditor();
if (editor == null)
return -1;
int pos = editor.getCaretPosition();
return editor.getLineNumber(pos);
}
/**
* Gets the SelectionFromIDE attribute of the JBuilderExtractMethod object
*
*@return The SelectionFromIDE value
*/
public String getSelectionFromIDE()
{
Browser browser = Browser.getActiveBrowser();
Node active = browser.getActiveNode();
AbstractTextNodeViewer sourceViewer =
(AbstractTextNodeViewer) Browser.getActiveBrowser().getViewerOfType(active, AbstractTextNodeViewer.class);
EditorPane editor = sourceViewer.getEditor();
return editor.getSelectedText();
}
/**
* Returns the frame that contains the editor. If this is not available or
* you want dialog boxes to be centered on the screen return null from this
* operation.
*
*@return the frame
*/
public JFrame getEditorFrame()
{
return Browser.getActiveBrowser();
}
/**
* Returns true if the current file being edited is a java file
*
*@return true if the current file is a java file
*/
public boolean isJavaFile()
{
Browser browser = Browser.getActiveBrowser();
Node active = browser.getActiveNode();
return (active instanceof JavaFileNode);
}
/**
* Gets the file that is being edited
*
*@return The File value
*/
public File getFile()
{
Browser browser = Browser.getActiveBrowser();
Node active = browser.getActiveNode();
if (active instanceof FileNode) {
return ((FileNode) active).getUrl().getFileObject();
}
else {
return null;
}
}
}